由於 vok-orm 非 JPA、Hibernate 那一類的框架,查詢也好刪除也好,並不會有一連串的關連式資料的連動作業。筆者個人對這樣的方式是非常偏好的,從資料表的建立到查詢、資料刪除,都不會有看不到的背景執行作業。
一般而言,刪除主表必需連同副表一併刪除。在本例中學生資料是主表,學生成績為副表,剛除學生時,學生成績必需一併刪除。
請打開 GradeViewComponent.kt
,在原來的表格最後加上刪除
按鍵
Student.getById(studentId).grades.fetch().forEach {grade ->
grades.apply {
div("table") {
div("tr") {
div("td") { label("${grade.description}") }
div("td") { label("${grade.mandarin}") }
div("td") { label("${grade.english}") }
div("td") { label("${grade.math}") }
div("td") { label("${grade.pe}") }
button("刪除"){
addThemeVariants(ButtonVariant.LUMO_TERTIARY, ButtonVariant.LUMO_SMALL )
onLeftClick { grade.delete(); refresh() }
}
}
}
}
}
請打開Student.kt
,複寫delete()
方法
override fun delete() {
Grade.deleteBy { Grade::student_id eq id }
super.delete()
}
當主表刪除時須連帶刪除附表,這裡複寫Student 的delete()
方法,在刪除學生資料前先刪除成績資料。